package controller.facade.sessionFacadeImplements;

import Model.persistencia.CriterioBusca;
import Model.persistencia.DAO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class SessionFacadeBuscarImplements {

    private CriterioBusca criterioDaBusca;
    private DAO dao;

    //busca pelo login e senha para validar o mesmo
    public boolean buscaLoginSenha(String login, String senha, Class classe) {
        this.setDao(dao = new DAO(classe));
        return this.getDao().buscaPeloLoginSenha(login, senha);
    }

    //retorna o total de registros
    public int totalDeRegistros(Class classe) {
        this.setDao(dao = new DAO(classe));
        return this.getDao().buscaTotalRegistros();
    }//fim totalRegistros

    //busca todos os registros do banco
    public List buscarTodos(String ordenarPor, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarTodos(ordenarPor));
    }//fim buscarTodos

    public List buscarTodosSacado(String ordenarPor, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarTodosComInativos(ordenarPor));
    }//fim buscarTodos

    public List buscarTodosAluno(String ordenarPor, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarTodosComInativos(ordenarPor));
    }

    public List buscarPorData(Date data, String ordenarPor, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarPorData(data, ordenarPor));
    }

    public List buscarPorDataGeral(Date data, String colunaDeData, String ordenarPor, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarPorDataGeral(data, colunaDeData, ordenarPor));
    }

    public double buscarSoma(Date data, String coluna_a_somar, Class classe) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarSoma(data, coluna_a_somar));
    }

    //busca no banco por nome, por exemplo "descricao"
    public List buscaPorNome(String campo_desejado, Object oque_buscar, Class classe) {
        this.setDao(dao = new DAO(classe));
        this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado, oque_buscar));
        return (this.getDao().buscaNome(this.getCriterioDaBusca()));
    }

    //busca no banco por codigo, ou seja, um numero, por exemplo o rg
    public List buscaPorCodigo(Class classe, String campo_desejado, Object oque_buscar) {
        this.setDao(dao = new DAO(classe));
        this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado, oque_buscar));
        return (this.getDao().buscarCodigo(this.getCriterioDaBusca()));
    }

    public List buscarInteiro(Class classe, String coluna, int codigo) {
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscarInteiro(coluna, codigo));
    }

    //métodos gets e sets
    private CriterioBusca getCriterioDaBusca() {
        return criterioDaBusca;
    }

    private void setCriterioDaBusca(CriterioBusca criterioDaBusca) {
        this.criterioDaBusca = criterioDaBusca;
    }

    private DAO getDao() {
        return dao;
    }

    private void setDao(DAO dao) {
        this.dao = dao;
    }
}//fim classe
